Avant C++11, la norme C++ était "indépendante des threads," basée sur des API spécifiques à la plateforme comme les threads POSIX (Pthreads) ou Win32. Le C++ moderne a révolutionné le langage en introduisant un modèle modèle mémoire et une API de concurrence standardisée.
1. Le « changement majeur » de C++11
C++11 a transformé le langage d'une machine abstraite mono-thread en une qui comprend nativement l'exécution concurrente grâce au <thread> entête et std::thread. Cela a déplacé la gestion multithreadée du domaine des bibliothèques externes vers le système de types fondamentaux.
2. Garanties d'exceptions
Le noexcept spécificateur est crucial dans les contextes concurrents. Il fournit un contrat selon lequel une fonction (comme le point d'entrée d'un thread) ne propagera pas d'exceptions. Si une exception s'échappe d'une noexcept frontière, std::terminate() est appelée immédiatement, empêchant toute corruption d'état indéfini.
3. Types de données cohérents
La normalisation inclut des types comme long long int (adopté de C99) et std::filesystem, garantissant que les largeurs des données et les interactions avec le système restent cohérentes à travers les architectures lorsqu'elles sont partagées entre threads.